1. Linking

Linking at A Peek

.o文件中包含一系列的01数据和元数据(链接器用与重定义和。。。)元数据指明了当前的object file定义了那些符号声明了那些符号

这些01数据以一定的格式(数据段/bss/代码段)存储,这些格式也作为元数据存储在.o文件中
.o文件是机器指令,实际上可以放到机器上运行了,但是我们上节课也看到,有的符号定义可能在其他的翻译单元(external reference),也就是为什么在Linux中,我们把.o文件成为.elf,链接后的文件格式仍然是.elf。但是视角不同了。链接器的职责就是将符号的外部引用替换到。。。(place the placeholder of external reference to an address)

one definition rule(ODR): ambitious, which one to call

生成可执行文件后:
-ldd prog (查看动态链接库)

objdump -g 添加debug信息

为什么我不需要链接C的动态链接库来运行程序?我直接用 ./proc?甚至用pthread库我也可以./proc而不是 ./proc -lpthread

-L来寻找库路径(默认会在 PATH 中去寻找,PATH 有很多(和环境变量的关系呢?
-I 是干嘛的?如果找不到,那么就在这里找

当使用<>时,就会去system path中寻找(include path
echo $PATH